import { showErrorMessage } from "../vscode/message";
import * as vscode from "vscode";
import { arenaErrorMsg } from "../vscode/errorMsg";
/**
 * 在光标位置或选区插入文本
 * @param text 要插入的文本内容
 * @param editor 当前活跃的编辑器实例
 */
export function insertTextAtSelection(
  text: string,
  editor: vscode.TextEditor,
): void {
  // 创建一个工作区编辑对象，用于管理编辑操作
  const edit = new vscode.WorkspaceEdit();
  // 获取当前编辑器中的所有选区
  const selections = editor.selections;

  // 如果存在选区，则在每个选区插入文本
  if (selections.length > 0) {
    for (const selection of selections) {
      // 获取选区的开始和结束位置
      const start = selection.start;
      const end = selection.end;
      // 在选区范围内替换文本为指定的text
      edit.replace(editor.document.uri, new vscode.Range(start, end), text);
    }
  } else {
    // 如果不存在选区，则在光标位置插入文本
    edit.insert(editor.document.uri, editor.selection.active, text);
  }
  // 应用编辑操作到工作区
  vscode.workspace.applyEdit(edit);
}

/**
 * 在当前编辑器光标位置或选区插入代码文本
 * @param text 要插入的代码文本内容
 */
export default function insertCode(text_ts: string, text_js?: string): void {
  // 获取当前活跃的编辑器实例
  const editor = vscode.window.activeTextEditor;
  // 如果没有活跃的编辑器，显示错误消息并返回
  if (!editor) {
    showErrorMessage(arenaErrorMsg.THERE_IS_CURRENTLY_NO_ACTIVE_EDITOR);
    return;
  }
  const languageId = editor.document.languageId;
  if (languageId === "typescript") {
    insertTextAtSelection(text_ts, editor);
  } else {
    insertTextAtSelection(text_js ?? text_ts, editor);
  }
}
